package com.xlh.dao.courseTest;

import com.xlh.dto.courseTest.ClassCheckCountDTO;
import com.xlh.dto.courseTest.check.ChapterCountDTO;
import com.xlh.dto.courseTest.check.ClassUncheckedCountDTO;
import com.xlh.dto.courseTest.check.StudentBaseListDTO;
import com.xlh.dto.courseTest.check.StudentListDTO;
import com.xlh.dto.courseTest.practice.PracticeExtDTO;
import com.xlh.dto.courseTest.practice.PracticeStudentInfoDTO;
import com.xlh.dto.courseTest.practice.PrictceCourseStatisticsDTO;
import com.xlh.dto.user.UserInfoDTO;
import com.xlh.pojo.courseTest.Practice;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author zhr 2019/4/3
 */
public interface PracticeMapperExt {
    /**
     * 通过章节id查询各章节汇总情况
     */
    List<ChapterCountDTO> countGroupByChapterId(@Param("chapterIds") List<Long> chapterIds);

    /**
     * 实验报告提交情况列表
     */
    List<StudentListDTO> listStudent(
            @Param("classId") Long classId, @Param("chapterId") Long chapterId, @Param("status") Integer status, @Param("studentInfo") String studentInfo
    );

    List<ClassCheckCountDTO> getClassCheckCount(@Param("classIds") List<Long> classIds, @Param("userId") Long userId, @Param("courseId") Long courseId);

    /**
     * 学生平时成绩
     */
    List<StudentBaseListDTO> listStudentBase(@Param("courseId") Long courseId, @Param("studentId") Long userId);

    List<StudentListDTO> listStudentBaseOther(@Param("userId") Long userId, @Param("courseId") Long courseId, @Param("chapterId") Long chapterId, @Param("classId") Long classId);

    List<Practice> selectByChapterIdsClassId(@Param("chapterIds") List<Long> chapterIds, @Param("classId") Long classId);

    List<ClassUncheckedCountDTO> selectUncheckedByCourseIds(@Param("courseIdList") List<Long> courseIdList);

    /**
     * 根据章节ID获取学生的平均分数
     * @param chapterId
     * @return
     */
    String getGradeAvg(@Param("chapterId") Long chapterId, @Param("studentIds") List<Long> studentIds);

    /**
     * 根据章节ID查询学生答题情况
     * @param chapterId
     * @return
     */
    List<PracticeStudentInfoDTO> practiceStudentInfo(@Param("chapterId") Long chapterId, @Param("userInfoDTOS") List<UserInfoDTO> userInfoDTOS);

    /**
     * 查询学生练习情况根据章节ID和学生Id
     * @param chapterIds 章节ID
     * @param userIds 用户ID
     * @return
     */
    List<PrictceCourseStatisticsDTO> findPracticeByChapterIdsAndUserIds(@Param("chapterIds") List<Long> chapterIds,
                                                                        @Param("userIds") List<Long> userIds );

    /**
     * 获取用户最近的答题情况
     * @param chapterId
     * @param userClassIds
     * @return
     */
    List<Practice> getRecentPractice(@Param("chapterId") Long chapterId, @Param("userIds") List<Long> userClassIds);


    /**
     * 查询随堂练习状态
     * @param chapterId 章节ID
     * @param userClassIds 学生ID
     * @return
     */
    List<PracticeExtDTO> findPracticeByChapterId(@Param("chapterId") Long chapterId, @Param("studentIds") List<Long> userClassIds);
}
